package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
)

/*
要求：
(1)编写一个Monster结构体，字段Name，Age，Skill
(2)给Monster绑定方法Store，可以将一个Monster变量(对象)，序列化后保存到文件中
(3)给Monster绑定方法ReStore，可以将一个序列化的Monster，从文件中读取，并反序列化为Monster对象
(4)编程测试用例文件store_test.go，编写测试用例函数TestStore和TestRestore进行测试
*/
type Monster struct {
	Name  string
	Age   int
	Skill string
}

func (m Monster) Store(filePath string) {
	monster := Monster{
		Name:  "牛魔王",
		Age:   18,
		Skill: "牛魔拳",
	}
	data, err := json.Marshal(&monster)
	if err != nil {
		fmt.Printf("序列化失败err=%v", err)
	}
	writeErr := ioutil.WriteFile(filePath, data, 0600)
	if writeErr != nil {
		fmt.Printf("文件写入错误writeErr=%v", writeErr)
	}

}
func (m Monster) ReStore(filePath string) *Monster {
	data, err := ioutil.ReadFile(filePath)
	if err != nil {
		fmt.Printf("文件读取失败err=%v", err)
	}
	var monster Monster
	serialErr := json.Unmarshal(data, &monster)
	if serialErr != nil {
		fmt.Printf("反序列化失败serialErr=%v", serialErr)
	}
	return &monster

}
func main() {
	writeFilePath := "src/go_code/chapter15/4单元测试案例/monster.txt"
	var monster Monster
	monster.Store(writeFilePath)
	m := monster.ReStore(writeFilePath)
	fmt.Println(*m)

}
